public class Test {
    public static void main(String[] args) {


        System.out.println("++++++++++++++++++");
        Student student1=new Student("团子",19);
        System.out.println("===============");
        Student student=new Student("董李阳",19);
    }
    public static void main3(String[] args) {
        Person person1=new Person("董李阳",19);
        System.out.println("========================");
        Person person2=new Person("团子",19);
        //静态代码亏啊先执行，并且只执行一次，在类加载阶段执行
        //当有对象创建时候，才会执行实例代码块
        //实例代码块执行后，构造方法才会执行
        //

    }

    public static void main2(String[] args) {
        Derived d =new Derived();

    }
}

//静态早于非静态
//父类早于子类
//


//父类的静态代码块优先与子类静态代码块执行，且是最早的
//父类实例代码块和父类构造方法紧接着执行
//子类的实例代码块和父类构造方法紧接着执行
//第二次哦实例化子类对象时候，父类和子类的静态代码块都不会再去执行

//protected

//主要限定：类或者类中成员能否在类外或者其他的包中被访问
//1 2 3 4

//在子类构造方法中，并没有写任何关于基类构造的代码，但是在构造子类对象的时候，先执行基类的构造方法，然后执行子类的构造方法，
//原因：子类对象成员是由两部分组成的，基类继承下来的以及子类新增加的部分，父子父子，先有父亲后有了儿子
//所以在构造子类对象的时候，要先调用基类的构造方法，将从基类继承下来的成员构造完整，然后在调用子类自己的构造方法，
//将子类自己增加的新成员初始化完整
//


//注意事项
//1.父类显示构造无参/或者默认的构造方法，子类构造方法的第一行默认含有隐含的super();自动调用了属于是
//2.如果父类构造方法是带有参数的，此时需要用户为子类显示的定义构造方法，并在子类构造方法中选择合适的父类构造方法
//3.子类构造方法中，super（），调用父类构造时候，必须是第一条语句
//super只能在子类构造方法中出现一次，并且不能和this同时出现
//因为this（），也需要在第一条
//


//super和this都可以在成员方法中用来访问：成员变量和调用其他的成员函数
//都可以作为构造方法的第一条语句
//那么他们有什么区别呢？
//1.this是当前对象的引用，当前对象即调用实例方法的对象，super相当于是子类对象中从父类继承下来的成员的引用
//在非静态成员方法中，this用来访问奔雷的方法和属性，super用来访问父类的方法和属性
//在构造方法中，this（）用于调用本类构造方法，super（）用来调用父类的构造方法
//两种调用不可i同时出现
//构造方法中一定会存在super（）调用，用户即使没有写，编译器也会增加
//因为所有的类都继承与Object

